package cn.bearspark.article.rpc;

import cn.bearspark.article.dto.category.AddCategoryDTO;
import cn.bearspark.article.dto.category.CategoryDTO;
import cn.bearspark.article.dto.category.CategorySimpleDTO;
import cn.bearspark.article.dto.category.ModifyCategoryDTO;

import java.util.List;

/**
 * 专栏分类的远程调用接口
 *
 * @author f
 */
public interface CategoryRpc {

    /**
     * 添加专栏分类
     * <p>
     * 个人专栏分类最多 100 个，如果超过 100 个，则不会添加
     *
     * @param addCategoryDTO 添加专栏分类的数据传输对象
     */
    void add(AddCategoryDTO addCategoryDTO);

    /**
     * 获取专栏分类信息
     *
     * @param userId     获取专栏分类信息的用户 id
     * @param categoryId 待获取信息的专栏分类 id
     * @return 专栏分类信息，如果该专栏分类不属于该用户，则返回 null
     */
    CategoryDTO get(long userId, long categoryId);

    /**
     * 修改专栏分类
     * <p>
     * 如果该专栏不属于该用户，则不做任何操作
     *
     * @param modifyCategoryDTO 修改专栏分类的数据传输对象
     */
    void modify(ModifyCategoryDTO modifyCategoryDTO);

    /**
     * 删除专栏分类
     * <p>
     * 如果该专栏不属于该用户，则不做任何操作
     *
     * @param userId     删除专栏分类的用户 id
     * @param categoryId 待删除的专栏分类 id
     */
    void delete(long userId, long categoryId);

    /**
     * 获取指定用户的专栏分类简要信息
     * <p>
     * 按照分类专栏数量进行排序
     *
     * @param userId       获取专栏分类简要信息的用户 id
     * @param listedUserId 待获取专栏分类简要信息集合的用户 id
     * @return 专栏分类简要信息的集合
     */
    List<CategorySimpleDTO> list(long userId, long listedUserId);
}
